/*
 * @Author: GYM-png 480609450@qq.com
 * @Date: 2024-10-15 20:15:30
 * @LastEditors: GYM-png 480609450@qq.com
 * @LastEditTime: 2024-10-25 22:16:09
 * @FilePath: \MDK-ARMd:\warehouse\CmdDebug\CmdDebug\UserCode\System\system.c
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

#include "system.h"
#include "usart_drv.h"
#include "dma.h"
#include "config.h"
#include "FreeRTOS_CLI.h"
#include "cm_backtrace.h"
#include "stdio.h"
#include "date.h"
#include "cmd.h"
#include "file_cmd.h"
extern void vRegisterSampleCLICommands( void );
extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );


/**
 * @brief 调试相关初始化 cmd和log
 * @param  
 */
void debug_init(void)
{
    // vTraceEnable(TRC_START);//快照模式
    date_init();
    vTraceEnable(TRC_START);//流模式
    uart_dma_init(DEBUG_UART_INDEX, SHELL_RX_LEN_MAX, configCOMMAND_INT_MAX_OUTPUT_SIZE);
    vRegisterSampleCLICommands();
    cmd_init();
    file_cmd_init();
    vUARTCommandConsoleStart(512, 4);
    log_init();
    cm_backtrace_init("STM32F429IGT6", "STM32F429IGT6", "STM32F429IGT6");
    log_w("  _____                        ____    _____    ___    ____  ");
    log_w(" |  ___|  _ __    ___    ___  |  _ \\  |_   _|  / _ \\  / ___| ");
    log_w(" | |_    | '__|  / _ \\  / _ \\ | |_) |   | |   | | | | \\___ \\ ");
    log_w(" |  _|   | |    |  __/ |  __/ |  _ <    | |   | |_| |  ___) |");
    log_w(" |_|     |_|     \\___|  \\___| |_| \\_\\   |_|    \\___/  |____/ ");
    log_w("                                                             ");
	elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TIME | ELOG_FMT_TAG);
}




/**
 * @brief 软件重启
 * @param tag 重启前输出的tag
 */
void system_reset_soft(const char* tag, ...)
{
    static char tag_buffer[128] = {0}; // 定义一个128字节的字符数组来存储tag的输出
    va_list args; // 创建一个va_list类型的变量，用来存储可变参数
    va_start(args, tag); // 使用va_start宏初始化args，使之指向第一个可选参数
    vsnprintf(tag_buffer, sizeof(tag_buffer), tag, args); // 使用vsnprintf处理可变参数列表
    va_end(args); // 使args不再指向可变参数列表中的任何参数
    log_e("系统即将重启 tag:%s", tag_buffer);
    vTaskDelay(10);
    NVIC_SystemReset(); // 重启
}